package com.hruiworks.campusgroup.service;

import com.hruiworks.campusgroup.pojo.entity.User;
import com.hruiworks.campusgroup.sse.ManagedEmitter;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;

import java.util.List;

/**
 * Sse相关业务封装
 */
public interface SseService {


    /**
     * 建立sse连接
     * @param schoolKey 学校key
     * @param key 连接标识
     * @return 返回连接对象
     */
    SseEmitter sseConnect(Integer schoolKey, String key);

    /**
     * 建立sse连接
     * @param user 连接的用户
     * @return 返回连接对象
     */
    SseEmitter sseConnect(User user);

    /**
     * 主动断开连接
     * @param user 连接的用户
     */
    void disconnect(User user);


    /**
     * 发送信息
     * @param user 用户
     * @param message 消息
     */
    void sendMessage(User user, String message);

    /**
     * 根据用户获取emitter对象
     * @param user 用户信息
     * @return 获取用户对应的emitter对象
     */
    ManagedEmitter getEmitter(User user);

    /**
     * 根据key获取emitter对象
     * @param key key
     * @return 获取key对应的emitter对象
     */
    ManagedEmitter getEmitter(Integer schoolKey, String key);

    /**
     * 根据用户用户生成对应的key
     * @param user 用户
     * @return 返回生成的key
     */
    String generateKey(User user);

    /**
     * 根据用户id生成对应key
     * @param userId 用户id
     * @return 生成的key
     */
    String generateKey(Long userId);

    /**
     * 移除emitter
     * @param user emitter对应的用户
     */
    void removeEmitter(User user);

    /**
     * 移除emitter
     * @param key 对应key
     */
    void removeEmitter(Integer schoolKey, String key);

    /**
     * 向所有用户推送某个消息
     * @param message 消息
     */
    void sendAllUserMessage(Integer schoolKey, String message);

    void sendGroupMessage(Integer schoolKey, List<Long> userIds, String message);

}
